// readonly修饰符：首先是一个关键字，对类中的属性成员进行修饰，修饰后，该属性成员吗，就不能在外部被随意的修改了
// 构造函数中，可以对只读的属性成员的，数据进行修改
// 如果构造函数中没有任何的参数，类中的属性成员此时已经使用readonly进行修饰了，那么外部是不能对这个属性值进行更改
// readonly只读，外部可以访问，不可以修改
// 构造函数中的参数可以使用public及private和protected进行修饰，无论是哪一个进行修饰，该类中会自动的添加这么一个属性成员
(()=>{

    // readonly修饰；类中的成员属性操作

    // //  定义一个类
    // class Person{
    //     // 属性
    //     readonly name:string = "前端工程师"
    //     constructor(name:string){
    //         this.name = name
    //         // this.name = "哈哈"   //可以
    //     }

    //     sayHi(){
    //         // 类中的普通方法中，也是不能修改readoly修饰的成员属性值
    //         // this.name = "32321"  //不可以
    //         console.log("123456",this.name)
    //     }
    // } 
    // // 实例化对象
    // const person: Person = new Person("小小浩")
    // console.log(person.name)
    // // 此时无法修改，因为name属性是只读的
    // // person.name = "大大浩"
    // // console.log(person)
    // // console.log(person.name)



    // readonly修饰类中的的改造函数中的参数(参数属性)

    //  定义一个类
    class Person{
        // 构造函数
        // 构造函数中的name参数，一旦使用readonly进行修饰后，那么该name参数可以叫参数属性
        // 构造函数中的name参数，一旦使用readonly进行修饰，那么Person中就有了一个name的属性成员
        // 构造函数中的name参数，一旦使用readonly进行修饰，外部也是无法修改类中的name属性成员
        // constructor(readonly name:string = "大甜甜"){
        //     this.name = name
        // }
        // 构造函数中的name参数，一旦使用public进行修饰，那么Person类中就有了一个公共的name属性成员了
        // constructor(public name:string = "大甜甜"){
        //     this.name = name
        // }

        // 构造函数中的name参数，一旦使用private进行修饰，那么Person类中就有了一个私有的name属性成员了
        // constructor(private name:string = "大甜甜"){
        //     this.name = name
        // }

        // 构造函数中的name参数，一旦使用protected进行修饰，那么Person类中就有了一个受保护的的name属性成员了
        constructor(protected name:string = "大甜甜"){
            this.name = name
        }
    } 
    // 实例化对象
    const person: Person = new Person("小小浩")
    console.log(person)
    
    person.name = "123"
    
    console.log(person.name)



})()